#include "AuthPeerData.h"

using namespace WONAPI;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
AuthPeerData::AuthPeerData(const AuthPubKeyBlock *theKeyBlock) :
	mCertificate(new AuthCertificate),
	mCertificate2(new Auth2Certificate),
	mKeyBlock(theKeyBlock),
	mAuthDelta(0)
{
	if(mKeyBlock.get()==NULL)
		mKeyBlock = new AuthPubKeyBlock;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
AuthPeerData::AuthPeerData(const AuthCertificate *theCertificate, const AuthPubKeyBlock *theKeyBlock, 
								const ElGamal &theKey, time_t theAuthDelta, const Auth2Certificate *theCert2) :
	mCertificate(theCertificate),
	mCertificate2(theCert2),
	mKeyBlock(theKeyBlock),
	mPrivateKey(theKey),
	mAuthDelta(theAuthDelta)
{
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
AuthPeerData::~AuthPeerData()
{
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool AuthPeerData::Verify(const AuthBase *theAuthBase) const
{
	return mKeyBlock->Verify(theAuthBase);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool AuthPeerData::CertificateExpired(time_t theExtraTime) const
{
	return mCertificate->IsExpired(theExtraTime + mAuthDelta);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool AuthPeerData::Certificate2Expired(time_t theExtraTime) const
{
	return mCertificate2->IsExpired(theExtraTime + mAuthDelta);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool AuthPeerData::IsValid() const
{
	return (mKeyBlock->IsValid() && mCertificate->IsValid() && mPrivateKey.IsPrivate());
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool AuthPeerData::IsValid2() const
{
	return (mKeyBlock->IsValid() && mCertificate2->IsValid() && mPrivateKey.IsPrivate());
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
time_t AuthPeerData::GetExpireDelta() const
{
	if(CertificateExpired())
		return 0;

	return mCertificate->GetExpireTime() - (time(NULL) + mAuthDelta);
}
